/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： App_Protocol_BF_BAT.h
** 模块名称： 八方串口电池协议处理模块
** 版 本 号： V1.0
** 作    者： 蒲磊
**
** 修改记录： 版本     修改人      时间         修改内容
******************************************************************************/
#ifndef __APP_PROTOCOL_BF_BAT_H_
#define __APP_PROTOCOL_BF_BAT_H_

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp.h"
/******************************************************************************
* 宏定义 ('#define')
******************************************************************************/
/*以下宏定义定义了每个参数的读取方式。0-不读取，1-只读取一次，2-反复读取*/
#define READ_BAT_TEMP                2       /*是否读取电池组温度*/
#define READ_BAT_VOLT                2       /*是否读取电池组电压*/
#define READ_BAT_CURRENT             2       /*是否读取电池组电流*/
#define READ_BAT_SOC                 2       /*是否读取相对容量百分比*/
#define READ_BAT_SOC_ABS             1       /*是否读取绝对容量百分比*/
#define READ_BAT_CAP                 2       /*是否读取剩余容量*/
#define READ_BAT_CAP_FULL            1       /*是否读取满电容量*/
#define READ_BAT_CYCLES              1       /*是否读取循环次数*/
#define READ_BAT_CELL1_7             1       /*是否读取1-7电芯电压*/
#define READ_BAT_CELL8_14            1       /*是否读取8-14电芯电压*/
#define READ_BAT_UNCHARGING_TIME     1       /*是否读取当前充电间隔时间*/
#define READ_BAT_UNCHARGING_TIME_MAX 1       /*是否读取最大充电间隔时间*/
#define READ_BAT_TYPE                0       /*是否读取电池组型号*/
#define READ_BAT_SW                  1       /*是否读取电池软件版本号*/
#define READ_BAT_HW                  1       /*是否读取电池硬件版本号*/
#define READ_BAT_SN                  0       /*是否读取电池SN号*/

/******************************************************************************
* 类型定义 ('typedef')
******************************************************************************/


typedef struct
{
    uint8_t     Error;      /*电池通信错误标志*/
    int16_t 	Temp;		/*电池组温度，0.1℃*/
    uint16_t    Volt;		/*总电压，单位mv*/
    int16_t     Current;	/*总电流，单位mA*/
    uint8_t     Soc;		/*相对容量百分比*/
    uint8_t     Soc_Abs;	/*绝对容量百分比*/
    uint16_t    Cap;		/*剩余容量，单位mAh*/
    uint16_t    Cap_Full;	/*满电容量，单位mAh*/
    uint16_t    Cycles;		/*循环次数*/
    uint16_t    NoChargingTime;/*充电间隔时间，单位：小时*/
    uint16_t    NoChargingTime_Max;/*最大充电间隔时间，单位：小时*/
    uint8_t     CellNum_1;          /*电芯数1*/
    uint8_t     CellNum_2;          /*电芯数2*/
    uint16_t    CellVolt[14];	/*电芯单体电压*/
    uint8_t     Type[40];	/*电池型号，ANSCII码，最长20*/
    uint8_t     SoftVer[40];/*电池软件版本号，ANSCII码，最长20*/
    uint8_t     HardVer[40];/*电池硬件版本号，ANSCII码，最长20*/
    uint8_t     SN[40];		/*电池序列号，ANSCII码，最长40*/
} stBATTERY_INFO;


/******************************************************************************
* 全局变量声明
******************************************************************************/

/******************************************************************************
* 函数声明
******************************************************************************/
void vPROTOCOL_Get_Data_BF_BAT(uint8_t *pRxBuffer,uint16_t Len);
void vPROTOCOL_Send_Data_BF_BAT(void);

int16_t sBF_BAT_Get_Temp(void);
uint16_t usBF_BAT_Get_Volt(void);
int16_t usBF_BAT_Get_Current(void);
int8_t  cBF_BAT_Get_Soc(void);
uint8_t ucBF_BAT_Get_Soc_ABS(void);
uint16_t usBF_BAT_Get_Cap(void);
uint16_t usBF_BAT_Get_CapFull(void);
uint16_t usBF_BAT_Get_Cycles(void);
uint16_t usBF_BAT_Get_Cell_Volt(uint8_t Cell);
uint8_t ucBF_BAT_Get_Communication_Err(void);
uint16_t usBF_BAT_Get_UnChargingTime(void);
uint16_t usBF_BAT_Get_UnChargingTime_Max(void);
uint8_t usBF_BAT_Get_CellNum(void);
uint8_t vBF_BAT_Get_HardwareVersion(char *pHW,uint8_t len);
uint8_t vBF_BAT_Get_SoftwareVersion(char *pHW,uint8_t len);
#endif
